package com.atguigu.sparsearray;

public class SparseArray {
    public static void main(String[] args) {
        //创建一个原始的二维数组11 x 11
        //0表示没有棋子，1表示黑子，2表示蓝子
        int chessArr [][] = new int [11][11] ;
        chessArr[1][2] = 1 ;
        chessArr[2][3] = 2 ;
        //遍历原始棋盘
        System.out.println("原始的二维数组");
        for (int[] rows : chessArr) {
            for (int data : rows) {
                System.out.printf("%d\t",data) ;
            }
            System.out.println();
        }
        //将二维数组转换为稀疏数组
        //先遍历二维数组，得到非零数据个数
        int count = 0 ;
        for (int[] rows : chessArr) {
            for (int data : rows) {
                if (data != 0) {
                    count++ ;
                }
            }
        }
        System.out.println(count);
        //创建对应的稀疏数组
        int sparseArr [][] = new int[count+1][3] ;
        //给稀疏数组赋值
        sparseArr[0][0] = 11 ;
        sparseArr[0][1] = 11 ;
        sparseArr[0][2] = count ;
        int countForSparse = 1 ;
        for (int i = 0; i < 11; i++) {
            for (int j = 0; j < 11; j++) {
                if (chessArr[i][j] != 0) {
                    sparseArr[countForSparse][0] = i ;
                    sparseArr[countForSparse][1] = j ;
                    sparseArr[countForSparse][2] = chessArr[i][j] ;
                    countForSparse++ ;
                }
            }
        }
        System.out.println("得到的稀疏数组如下：");
        for (int i = 0; i < sparseArr.length; i++) {
            for (int j = 0; j < sparseArr[i].length; j++) {
                System.out.printf("%d\t",sparseArr[i][j]) ;
            }
            System.out.println();
        }
        //将稀疏数组转换为原始的二维数组
        int newChessArr [][] = new int[11][11] ;
        for (int i = 1; i < sparseArr.length; i++) {
           newChessArr[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2] ;
        }

        System.out.println("还原棋盘如下：");
        for (int i = 0; i < 11; i++) {
            for (int j = 0; j < 11; j++) {
                System.out.printf("%d\t",newChessArr[i][j]) ;
            }
            System.out.println();
        }


    }
}
